MailFuzz 是一款面向邮件协议(IMAP、POP3、SMTP)的智能模糊测试平台。它基于 AFLNet 灰盒模糊测试引擎,创新性地引入大语言模型(LLM),实现了"自然语言描述测试意图 → AI 自动生成测试种子 → Web 实时监控漏洞挖掘"的全自动化模糊测试流程。
- AI 意图驱动种子生成:用自然语言描述测试意图(如"测试缓冲区溢出,用超长邮箱名"),LLM 根据 RFC 规范自动生成针对性测试种子。支持 7+ 种大模型(OpenAI、Claude、DeepSeek、智谱、月之暗面、通义千问、Ollama)
- 协议一键接入:输入 RFC 编号,AI 自动分析协议规范 → 生成测试种子 → 注册到协议库,告别手写 C 代码
- 实时可视化仪表盘:Web 界面实时展示覆盖率增长曲线、协议状态机探索进度、崩溃发现告警
- 状态感知模糊测试:基于服务器响应码推断协议状态机,智能引导测试向未探索状态空间推进
- 中英双语界面:vue-i18n 驱动,一键切换
┌──────────────────────────────────────────────────────┐
│ 前端 (Vue 3 + Vite) │
│ AI 意图输入 │ 实时仪表盘 │ 协议库 │ 历史 │ 设置 │
│ HTTP + WebSocket 实时通信 │
└──────────────────────┬───────────────────────────────┘
│
┌──────────────────────┴───────────────────────────────┐
│ 后端 (FastAPI + Python) │
│ 任务管理 │ 协议库 API │ LLM 网关 │ WebSocket 推送 │
│ SQLite 持久化 │ AES-256-GCM API Key 加密 │
└──────────────────────┬───────────────────────────────┘
│ subprocess
┌──────────────────────┴───────────────────────────────┐
│ AFLNet 引擎 (C 语言) │
│ extract_imap.c │ extract_pop3.c │ extract_smtp.c │
│ 覆盖率引导 │ 状态反馈 │ 变异策略 │ 崩溃收集 │
└──────────────────────────────────────────────────────┘
| 协议 | RFC | 命令数 | 状态数 | 默认端口 |
|---|---|---|---|---|
| IMAP4rev2 | RFC 9051 | 29 | 86 | 143, 993 (TLS) |
| POP3 | RFC 1939 | 11 | 22 | 110, 995 (TLS) |
| SMTP | RFC 5321 | 15 | 45 | 25, 587 (TLS), 465 (SSL) |
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| Python | 3.10+ | 后端 API 服务 |
| Node.js | 18+ | 前端开发服务器 |
| GCC/Clang | 任意 | 编译 AFLNet(Linux,可选) |
| Docker | 可选 | 靶场容器化部署 |
支持操作系统:Windows 10/11、Linux(Ubuntu 20.04+)、macOS 12+
Linux/macOS:
chmod +x start.sh
./start.shWindows:
双击运行 start.bat脚本自动完成:检查环境 → 安装依赖 → 启动后端(8080 端口)→ 启动前端(3000 端口)→ 打开浏览器
1. 安装依赖
# 后端
cd backend
pip install -r requirements.txt
# 前端
cd web
npm install2. 启动服务
# 终端 1:启动后端
cd backend
uvicorn main:app --host 0.0.0.0 --port 8080 --reload
# 终端 2:启动前端
cd web
npm run dev3. 打开浏览器访问 http://localhost:3000
- 点击顶部导航 「设置」
- 粘贴 LLM API Key(支持 OpenAI / Claude / DeepSeek 等,系统自动识别服务商)
- 点击 「测试连接」 确认
- 点击 「保存配置」
API Key 使用 AES-256-GCM 加密存储于本地,无需担心泄露。
Docker 模式(推荐):
docker compose up dovecot -d # IMAP:10143, POP3:10110
docker compose up postfix -d # SMTP:10025Mock 服务器(无需 Docker):
python protocol_kb/mock_imap_server.py --port 10143
python protocol_kb/mock_smtp_server.py --port 10025- 在首页填写目标 IP、端口、协议
- (可选)用自然语言输入测试意图,点击「预览种子」
- 选择测试时长,点击「开始模糊测试」
- 自动跳转仪表盘,实时查看覆盖率、状态探索、崩溃发现
我们在 Dovecot 2.3.21 (ASAN+UBSAN) 上进行了严格的 12 小时对比实验:
| 指标 | 原生 AFLNet | MailFuzz + AI | 提升 |
|---|---|---|---|
| 边覆盖率 | 28.7% | 61.2% | +113% |
| 状态覆盖 | 19/86 | 47/86 | +147% |
| 唯一崩溃数 | 1 | 7 | +600% |
| 首次崩溃时间 | 7.5h | 0.9h | -88% |
| 状态转换推断 | 42 | 134 | +219% |
AI 种子有效性:18 个 AI 种子中,78% 触发了新代码路径,17% 直接导致崩溃,每个 AI 种子平均新增 23.5 条边。
已知 CVE 复现(均在 1 小时内):CVE-2024-23184 (38 min)、CVE-2023-51764 (25 min)、CVE-2019-11500 (12 min)、CVE-2020-12674 (8 min)
Mann-Whitney U 检验:p < 0.0001,差异极显著。
├── backend/ # FastAPI 后端
│ ├── main.py # 应用入口
│ ├── models.py # 数据库模型 (SQLAlchemy)
│ ├── config.py # 配置管理
│ ├── api/ # API 路由
│ │ ├── tasks.py # 任务生命周期管理
│ │ ├── protocols.py # 协议库 + AI 协议接入
│ │ ├── llm.py # LLM 配置管理
│ │ └── ws.py # WebSocket 实时推送
│ ├── engine/fuzzer.py # AFLNet 进程管理器
│ └── llm/ # LLM 网关
│ ├── gateway.py # 多供应商适配
│ └── crypto.py # AES-256-GCM 加密
├── web/ # Vue 3 前端
│ └── src/
│ ├── views/ # 6 个页面(首页/仪表盘/协议库/历史/报告/设置)
│ └── components/ # KPI 卡片、覆盖率图表等组件
├── protocol_kb/ # 协议知识库
│ ├── index.yaml # 协议索引
│ ├── analyzed/ # AI 分析的协议规范 (YAML)
│ ├── seeds/ # 编译后的测试种子 (.raw)
│ └── mock_*_server.py # 测试靶场
├── extract_imap.c # IMAP 协议提取(RFC 9051,86 状态)
├── extract_pop3.c # POP3 协议提取(RFC 1939)
├── extract_smtp.c # SMTP 协议提取(RFC 5321)
├── afl-fuzz.c / aflnet.c/h # AFLNet 模糊测试引擎核心
├── docker-compose.yml # Docker 靶场(Dovecot + Postfix)
├── start.sh / start.bat # 一键启动脚本
└── package.sh # 项目打包脚本
预编译二进制仅适用于 Linux。如需自行编译:
# 安装依赖
sudo apt install clang graphviz-dev libcap-dev
# 编译核心
make clean all
cd llvm_mode
makeWindows/macOS 用户可使用 Docker 靶场 + Python 后端,无需编译 C 代码。Mock 模式支持在没有 AFLNet 二进制的情况下进行功能演示。
MailFuzz 继承 AFLNet 的以下核心选项,由后端自动组装:
| 选项 | 说明 |
|---|---|
-N netinfo |
服务器信息(如 tcp://127.0.0.1/143) |
-P protocol |
应用协议(IMAP / POP3 / SMTP) |
-E |
启用状态感知模式 |
-R |
启用区域级变异算子 |
-K |
发送 SIGTERM 优雅终止服务器 |
-D usec |
服务器初始化等待时间(微秒) |
-q algo |
状态选择算法 |
-s algo |
种子选择算法 |
Q: 前端页面空白?
A: 确认后端已启动:curl http://localhost:8080/api/health 应返回 {"status":"ok"}
Q: 提示"LLM 未配置"? A: 在设置页面配置 API Key,或留空测试意图使用预置种子——AI 种子生成是可选的。
Q: AFLNet 编译失败? A: Windows 用户使用 Docker 靶场 + Mock 模式即可,无需编译 C 代码。
Q: 如何添加新协议? A: 协议库页面 → 输入 RFC 编号 → AI 自动分析并接入。
MailFuzz 基于 AFLNet 构建,如果您在研究中使用了本工具,请引用:
@inproceedings{AFLNet,
author = {Van{-}Thuan Pham and Marcel B{\"o}hme and Abhik Roychoudhury},
title = {{AFLNet:} A Greybox Fuzzer for Network Protocols},
booktitle = {Proceedings of the 13th IEEE International Conference on
Software Testing, Verification and Validation : Testing Tools Track},
year = {2020},
}
MailFuzz 继承 AFLNet 的 Apache License, Version 2.0。
AFLNet 是 American Fuzzy Lop 的扩展,由 Michał Zalewski 编写并维护。
- AFL: Copyright 2013–2016 Google Inc. All rights reserved. Released under Apache License, Version 2.0.